package com.xcj.springai.utils;


import com.xcj.springai.entity.ChatMessageEntity;
import org.springframework.ai.chat.messages.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

public class MessageConverter {

    /**
     * 将 Message 转换为 ChatMessage
     */
    public static ChatMessageEntity toChatMessage(Message message, String conversationId, String userId) {
        return ChatMessageEntity.builder()
                .conversationId(conversationId)
                .userId(Long.valueOf(userId))
                .roleType(message.getMessageType())
                .content(message.getText())
                .createTime(new Date())
                .updateTime(new Date())
                .metadata(message.getMetadata())
                .build();
    }
//    public static ChatMessageEntity toChatMessage(Message message, String prefix, String conversationId, String userId) {
//        ChatMessageEntity entity = ChatMessageEntity.builder()
//                .conversationId(conversationId)
//                .userId(Long.valueOf(userId))
//                .roleType(message.getMessageType())
//                .content(message.getText())
//                .createTime(new Date())
//                .updateTime(new Date())
//                .metadata(message.getMetadata())
//                .build();
//
//        // 根据 prefix 判断是否是工具调用
//        if ("TOOL".equals(prefix)) {
//            entity.setMt("tool_call");
//        }else {
//            entity.setMt(null); // 或不设置，默认值
//        }
//
//        return entity;
//    }

    /**
     * 将 ChatMessage 转换为 Message
     */
    public static Message toMessage(ChatMessageEntity chatMessage) {
        MessageType messageType = chatMessage.getRoleType();
        String text = chatMessage.getContent();
        Map<String, Object> metadata = chatMessage.getMetadata();
        return switch (messageType) {
            case USER -> new UserMessage(text);
            case ASSISTANT -> new AssistantMessage(text, metadata);
            case SYSTEM -> new SystemMessage(text);
            case TOOL -> new ToolResponseMessage(List.of(), metadata);
        };
    }

}
